package de.projectgoodmorning.alarm.activities.util;

import java.sql.Date;
import java.text.SimpleDateFormat;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import de.projectgoodmorning.alarm.R;
import de.projectgoodmorning.alarm.activities.MainActivity;
import de.projectgoodmorning.alarm.model.gateway.CombinedAlarm;
import de.projectgoodmorning.alarm.util.RsrcHelper;

/**
 * Der AlarmNotificationManager ist eine Hilfsklasse, welche die
 * Funktionalitaet uebernimmt aktivierte oder deaktivierte Alarme in
 * der Systemtaskleiste als Notification darzustellen.
 */
public class AlarmNotificationManager {
	
	private NotificationManager notificationManager;
	private Context context;
	
	/**
	 * erstellt einen AlarmNotificationManager und holt sich Zugriff
	 * auf den NotificationManager
	 * @see		NotificationManager
	 * @param 	context		erwartet den Context fuer den Zugriff
	 */
	public AlarmNotificationManager( Context context ) {
		this.context = context;
		
		String ns = Context.NOTIFICATION_SERVICE;
		notificationManager = ( NotificationManager ) context.getSystemService( ns );
	}
	
	/**
	 * entfernt alle Notifications der Anwendung
	 */
	public void deactiveAll() {
		notificationManager.cancelAll();
	}
	
	/**
	 * entfernt eine bestimmte Notification eines Alarms.
	 * Diese Notification wird ueber die ID des Alarms aufgeloest.
	 * 
	 * @param alarm		erwartet einen CombinedAlarm mit einer ID
	 */
	public void deactiveNotification( CombinedAlarm alarm ) {
		notificationManager.cancel( alarm.id );
	}
	
	/**
	 * erstellt eine Notification fuer einen Alarm.
	 * Dabei ist wichtig das der Alarm eine ID besitzt, da sonst
	 * das Entfernen der Notification fuer diesen Alarm nicht 
	 * moeglich ist.
	 * 
	 * @param alarm		erwartet einen CombinedAlarm mit einer ID
	 */
	public void activateNotification( CombinedAlarm alarm ) {
		RsrcHelper res = new RsrcHelper( context );
		
		CharSequence tickerText = res.getString( R.string.alarmActivated );
		long when = System.currentTimeMillis();

		Notification notification = new Notification( 
				R.drawable.ic_launcher, tickerText, when );
		
		SimpleDateFormat sdf = new SimpleDateFormat( "HH:mm" );
		Date alarmTime = new Date( alarm.getMainAlarm().getMoment() );
		
		CharSequence contentTitle = alarm.name + " " + res.getString( R.string.active );
		String wakeUp = res.getString( R.string.wakeupTime );
		CharSequence contentText = wakeUp + ": " + sdf.format( alarmTime );
		Intent notificationIntent = new Intent( context, MainActivity.class );
		PendingIntent contentIntent = PendingIntent.getActivity(
				context, alarm.id, notificationIntent, 0 );

		notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent );
		notificationManager.notify( alarm.id, notification );
	}
}
